home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 12 / Amiga Plus Sonderheft Amiga 12.iso / rexx / invoice.rexx < prev    next >
OS/2 REXX Batch file  |  1995-03-14  |  6KB  |  298 lines

  1. /*
  2.         TimeKeep - Final Writer script
  3.         $VER: 14 Mar 1995 - Invoice.rexx
  4. */
  5.  
  6. options results
  7.  
  8. /* Initialize */
  9. 'CopyRuler'
  10. Tab = '09'x
  11. Quote = '22'x
  12. cInvoice = 0
  13.  
  14. DataPath = "S:TimeKeep/"
  15.  
  16. 'RequestText' '"Create Invoice" "ENTER Client Code" ""'
  17. iNameCode = RESULT
  18.  
  19. if iNameCode = "" | iNameCode = "RESULT" then exit
  20.  
  21. /* Read Time Data */
  22. if ~ open('Time', DataPath||iNameCode||".time", 'R') then do
  23.     'ShowMessage' 1 1 '"CREATE INVOICE ERROR" ".time NOT FOUND" "" "OK" "" ""'
  24.     exit
  25. end
  26.  
  27. t = readln('Time')
  28. parse var t '"'Client.NameCode'","'Client.Name'"'
  29.  
  30. /* Collate */
  31. Projects = "|"; nProjects = 0 ; Expenses = 0; Work = 0
  32. do while ~eof('Time')
  33.     t = readln('Time')
  34.     parse var t '"'tType'","'tProject'",'tInfo
  35.  
  36.     if tInfo == "" then leave
  37.  
  38.     if index(Projects, "|"tProject"|") = 0 then do
  39.         /* Project not found */
  40.         Projects = Projects||tProject"|"
  41.         nProjects = nProjects + 1
  42.         Projects.nProjects.Name = tProject
  43.  
  44.         if tType = "T" then do
  45.             Projects.nProjects.count = 1
  46.             Expenses.nProjects.count = 0
  47.             end
  48.         else do
  49.             Projects.nProjects.count = 0
  50.             Expenses.nProjects.count = 1
  51.         end
  52.  
  53.         cProject = nProjects; n = 1
  54.         end
  55.     else do
  56.         /* Project exists */
  57.         do lp = 1 to nProjects
  58.             if Projects.lp.Name = tProject then leave
  59.         end
  60.         cProject = lp
  61.  
  62.         if tType = "T" then do
  63.             Projects.lp.count = Projects.lp.count + 1
  64.             n = Projects.lp.count
  65.             end
  66.         else do
  67.             Expenses.lp.count = Expenses.lp.count + 1
  68.             n = Expenses.lp.count
  69.         end
  70.     end
  71.  
  72.     if tType = "T" then do
  73.         Projects.cProject.n.Info = tInfo
  74.         Work = 1
  75.         end
  76.     else do
  77.         Expenses.cProject.n.Info = tInfo
  78.         Expenses = 1
  79.     end
  80. end
  81.  
  82. call close('Time')
  83.  
  84. if nProjects = 0 then do
  85.     'ShowMessage' 1 1 '"CREATE INVOICE ERROR" "NO Logged Time or Expenses" "" "OK" "" ""'
  86.     exit
  87. end
  88.  
  89. /* Read Invoice Number */
  90. if open('Invoice', DataPath||Client.NameCode||".invoice", 'R') then do
  91.     cInvoice = readln('Invoice')
  92.     call close('Invoice')
  93. end
  94.  
  95. cInvoice = cInvoice + 1
  96.  
  97. Client.Invoice = right(cInvoice, 2, "0")
  98.  
  99. /* Create Invoice */
  100.  
  101. 'Justify' CENTER
  102.  
  103. /* Invoice # */
  104. 'Font' "SoftSans_Bold"; 'FontSize' 24
  105. 'Type' "Invoice #"Client.NameCode''Client.Invoice
  106.  
  107. 'NewParagraph'
  108.  
  109. /* Client Name */
  110. 'Font' "SoftSans_Bold"; 'FontSize' 14
  111. 'Type' Client.Name
  112.  
  113. 'NewParagraph'; 'NewParagraph'
  114. 'Justify' RIGHT
  115.  
  116. /* Date */
  117. 'Font' "SoftSans_Bold"; 'FontSize' 12
  118. 'Insert' DATE
  119.  
  120. 'NewParagraph'
  121. 'Justify' CENTER
  122. 'NewParagraph'
  123.  
  124. /* Work Description */
  125. 'Font' "SoftSans_Bold"; 'FontSize' 18
  126. 'Type' "Work"
  127.  
  128. 'NewParagraph'
  129. 'Justify' LEFT
  130.  
  131. /* Work Description - Projects */
  132.  
  133. do lp = 1 to nProjects
  134.     if Projects.lp.Name ~= "" then do
  135.         'PasteRuler'
  136.         'Font' "SoftSans_Bold"; 'FontSize' 12
  137.         'Type' Projects.lp.Name
  138.         'NewParagraph'
  139.  
  140.         'SetTab' .125 LEFT
  141.         'Font' "SoftSans"; 'FontSize' 12
  142.         'Type' tab"· "
  143.         'NewParagraph'
  144.     end
  145. end
  146.  
  147.  
  148. /* Expenses */
  149. TotalExpenses = 0
  150. if Expenses then do
  151.     'Justify' CENTER
  152.     'NewParagraph'
  153.     'Font' "SoftSans_Bold"; 'FontSize' 18
  154.     'Type' "Expenses"
  155.  
  156.     'NewParagraph'
  157.     'Justify' LEFT
  158.  
  159.     do lp = 1 to nProjects
  160.         if Expenses.lp.count = 0 then iterate
  161.  
  162.         'PasteRuler'
  163.         'Font' "SoftSans_Bold"; 'FontSize' 12
  164.         'Type' Projects.lp.Name
  165.         'NewParagraph'
  166.  
  167.         'Font' "SoftSans"; 'FontSize' 12
  168.         'SetTab' .125 LEFT; 'SetTab' 6.0 DECIMAL
  169.         do lp2 = 1 to Expenses.lp.count
  170.             parse var Expenses.lp.lp2.Info '"'tInfo'","'tAmount'"'
  171.             'Type' tab''tInfo''tab''tAmount
  172.             'NewParagraph'
  173.             TotalExpenses = TotalExpenses + tAmount
  174.         end
  175.     end
  176.  
  177.     'PasteRuler'
  178.     'SetTab' 5.0 RIGHT; 'SetTab' 6.0 DECIMAL
  179.  
  180.     'Font' "SoftSans_Bold"; 'FontSize' 14
  181.     'Type' Tab"Expenses"Tab"$"TotalExpenses
  182.  
  183.     'NewParagraph'
  184.     'PasteRuler'
  185. end
  186.  
  187.  
  188. Total = 0
  189. if Work then do
  190.     'Justify' CENTER
  191.     'NewParagraph'
  192.     /* Work Hours */
  193.     'Font' "SoftSans_Bold"; 'FontSize' 18
  194.     'Type' "Work Hours"
  195.  
  196.     'NewParagraph'
  197.     'Justify' LEFT
  198.  
  199.     do lp = 1 to nProjects
  200.         if Projects.lp.count = 0 then iterate
  201.  
  202.         'PasteRuler'
  203.         'Font' "SoftSans_Bold"; 'FontSize' 12
  204.         'Type' Projects.lp.Name
  205.         'NewParagraph'
  206.  
  207.         'SetTab' .6875 RIGHT; 'SetTab' 1.5625 RIGHT; 'SetTab' 1.625 LEFT
  208.         'SetTab' 2.4375 RIGHT; 'SetTab' 2.8125 DECIMAL
  209.         'SetTab' 4.0625 RIGHT; 'SetTab' 4.9375 RIGHT; 'SetTab' 5.0 LEFT
  210.         'SetTab' 5.8125 RIGHT; 'SetTab' 6.1875 DECIMAL
  211.  
  212.         'Font' "SoftSans"; 'FontSize' 11
  213.         nLeft = trunc(Projects.lp.count / 2 + .5)
  214.  
  215.         HSubTotal = 0
  216.         do lp2 = 1 to nLeft
  217.             parse var Projects.lp.lp2.Info '"'tDate'","'tT1'","'tT2'","'tH'","'tRate'"'
  218.             'Type' Tab''tDate''Tab''tT1''Tab"-"Tab''tT2''Tab''tH
  219.             'NewParagraph'
  220.             HSubTotal = HSubTotal + tH
  221.         end
  222.  
  223.         if Project.lp.count ~= 1 then do
  224.             do lp2 = 1 to nLeft; 'Cursor' UP; end
  225.             'CtrlDown'; 'AltDown'; 'Cursor' RIGHT; 'AltUp'; 'CtrlUp'
  226.             do lp2 = nLeft+1 to Projects.lp.count
  227.                 parse var Projects.lp.lp2.Info '"'tDate'","'tT1'","'tT2'","'tH'","'tRate'"'
  228.                 'Type' Tab''tDate''Tab''tT1''Tab"-"Tab''tT2''Tab''tH
  229.                 'Cursor' DOWN
  230.                 HSubTotal = HSubTotal + tH
  231.             end
  232.         end
  233.  
  234.         SubTotal = trunc(HSubTotal * tRate + .5e-2, 2)
  235.  
  236.         'Cursor' DOWN
  237.         'PasteRuler'
  238.         'SetTab' 4.0 DECIMAL; 'SetTab' 6.0 DECIMAL
  239.  
  240.         'Font' "SoftSans_Bold"; 'FontSize' 12
  241.         'Type' Tab''HSubTotal
  242.         'Font' "SoftSans"; 'FontSize' 12
  243.         'Type' " @ $"tRate" / hour"
  244.         'Font' "SoftSans_Bold"; 'FontSize' 12
  245.         'Type' Tab''SubTotal
  246.         'NewParagraph'
  247.         Total = Total + SubTotal
  248.     end
  249.  
  250.     'PasteRuler'
  251.     'SetTab' 5.0 RIGHT; 'SetTab' 6.0 DECIMAL
  252.  
  253.     'Font' "SoftSans_Bold"; 'FontSize' 14
  254.     'Type' Tab"Work"Tab"$"Total
  255. end
  256.  
  257. 'NewParagraph'; 'NewParagraph'
  258.  
  259. Total = Total + TotalExpenses
  260. 'PasteRuler'
  261. 'SetTab' 5.0 RIGHT; 'SetTab' 6.0 DECIMAL
  262. 'Font' "SoftSans_Bold"; 'FontSize' 18
  263. 'Type' Tab"Total"Tab"$"
  264. 'Style' UNDERLINE
  265. 'Type' Total
  266. 'Style' NORMAL
  267.  
  268. 'NewParagraph'
  269. 'PasteRuler'
  270. 'NewParagraph'; 'NewParagraph'
  271.  
  272. 'Type' "Payment To:"
  273.  
  274. 'NewParagraph'
  275. 'Justify' CENTER
  276.  
  277. 'Font' "SoftSans"; 'FontSize' 12
  278. 'Type' "scott dhomas trenn"
  279. 'NewParagraph'
  280. 'Type' "797 Mitchell Street, Fredericton, NB   E3B 3S8"
  281. 'NewParagraph'
  282. 'Type' "(506) 459-7088"
  283.  
  284. /* Reposition Cursor */
  285. 'CtrlDown'; 'AltDown'; 'Cursor' UP; 'AltUp'; 'CtrlUp'
  286. do lp = 1 to 7; 'Cursor' DOWN; end
  287. 'CtrlDown'; 'AltDown'; 'Cursor' RIGHT; 'AltUp'; 'CtrlUp'
  288.  
  289. /* Write Invoice Number */
  290. call open('Invoice', DataPath||Client.NameCode||".invoice", 'W')
  291. call writeln('Invoice', cInvoice)
  292. call close('Invoice')
  293.  
  294. /* Backup .time data file */
  295. ADDRESS COMMAND 'C:Rename' DataPath||Client.NameCode||".time" DataPath||Client.NameCode||".time."Client.Invoice
  296.  
  297. exit
  298.